home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / edit / me_cd25.zip / BOBSMUTT.ZIP / MAKEBACK.MUT next >
Text File  |  1992-05-11  |  5KB  |  200 lines

  1.   ;; $Source: c:/lib/mutt/RCS/makeback.mut $
  2.   ;; $Revision: 1.5 $
  3.   ;; $Date: 1992/05/12 00:19:48 $
  4.   ;; Bob Stocker Public Domain
  5.   
  6. (const BACKUP-CHAR '~')            ;; Last character in "type" field
  7.                     ;; of the "backup" (i.e. previous
  8.                     ;; version) of a file.
  9.                     
  10.             ;; NOTE: Changing these commands to fit other
  11.             ;; operating systems may not be enough.  For example,
  12.             ;; the "mv" command on Unix systems may require
  13.             ;; that both files be specified with pathnames.  A
  14.             ;; pathname for the second file is not allowed by
  15.             ;; the MS-DOS "rename" command.  Check code in which
  16.             ;; these constants are used before running these
  17.             ;; programs on a different operating system.
  18.             
  19. (const DELETE-COMMAND "del")        ;; OS command to delete a file
  20. (const RENAME-COMMAND "rename")        ;; OS command to rename a file
  21.  
  22.             ;; Routines in this (defun) are highly operating
  23.             ;; system dependent.
  24.  
  25. (defun
  26.   external-file-name (string fn)
  27.             ;; Translates internal filename to exteranl
  28.             ;; filename.
  29.  
  30.             ;; MS-DOS version -- translates '/' to '\'.
  31.  
  32. {                    ;; BEGIN external-file-name
  33.   (int i l)
  34.   (string fname)
  35.   (fname (fn))
  36.   (l (length-of fname))
  37.   (for
  38.     (i 0)
  39.     (< i l)
  40.     (+= i 1)
  41.     (if
  42.       (== (extract-element fname i) '/')
  43.     {                    ;; BEGIN / -> \
  44.       (insert-object fname i '\')
  45.       (remove-elements fname i 1)
  46.     }                    ;; END   / -> \
  47.     )
  48.   )
  49.   (fname)
  50. }                    ;; END   external-file-name
  51. )
  52.  
  53. ;;
  54. ;; ================================================================
  55. ;;
  56.   
  57. (defun
  58.   make-backup-name (string fname)
  59.             ;; Creates a new name for the previous version
  60.             ;; of the file being edited.
  61. {                    ;; BEGIN make-backup-name
  62.   (int i imin l)
  63.   (string bname c)
  64.   (bname (fname))
  65.   (l (length-of bname))
  66.   (imin (- l 4))
  67.   (if (< imin 0) (imin 0))
  68.   (for
  69.     (i (- l 1))
  70.     (>= i imin)
  71.     (-= i 1)
  72.   {                    ;; BEGIN scan for "."
  73.     (if
  74.       (== (extract-element bname i) ".")
  75.     {                    ;; BEGIN found "."
  76.       (if
  77.         (== (- l i) 4)
  78.     (remove-elements bname (- l 1) 1)
  79.       )
  80.       (concat bname BACKUP-CHAR)
  81.       (done)
  82.     }                    ;; END   found "."
  83.     )
  84.   }                    ;; END   scan for .
  85.   )
  86.   (concat bname "." BACKUP-CHAR)
  87. }                    ;; END   make-backup-name
  88. ;;
  89. ;; ================================================================
  90. ;;
  91.   zap-path (string fname)
  92.             ;; Deletes any path prefix on a filename.
  93. {                    ;; BEGIN zap-path
  94.   (int i l)
  95.   (string c only-name)
  96.   (only-name fname)
  97.   (l (length-of fname))
  98.   (for
  99.     (i (- l 1))
  100.     (>= i 0)
  101.     (-= i 1)
  102.   {                    ;; BEGIN scan for /:\
  103.     (c (extract-element fname i))
  104.     (if
  105.       (or
  106.         (== c '/')
  107.         (== c '\')
  108.         (== c ':')
  109.       )
  110.     {                    ;; BEGIN zap d:\pathname
  111.       (only-name
  112.         (extract-elements
  113.       fname
  114.       (+ i 1)
  115.       (- l i 1)
  116.     )
  117.       )
  118.       (break)
  119.     }                    ;; END   zap d:\pathname
  120.     )
  121.     }                    ;; END   scan for /:\
  122.   )
  123.   (only-name)
  124. }                    ;; END   zap-path
  125. ;;
  126. ;; ================================================================
  127. ;;
  128.   save-buffer-with-backup
  129.             ;; Renames the previous version of the file before
  130.             ;; saving the buffer.
  131. {                    ;; BEGIN save-buffer-with-backup
  132.   (string fname)
  133.   (string bname)
  134.   (int i l)
  135.   (fname (file-name (current-buffer)))
  136.   (l (length-of fname))
  137.   (if
  138.     (file-exists fname)
  139.   {                    ;; BEGIN file exists
  140.     (bname (make-backup-name fname))
  141.     (if
  142.       (file-exists bname)
  143.     {                    ;; BEGIN del
  144.       (msg "Deleting " bname)
  145.       (OS-filter
  146.         (concat
  147.       DELETE-COMMAND " "
  148.       (external-file-name bname)
  149.     )
  150.       )
  151.     }                    ;; END   del
  152.     )
  153.     (msg "Renaming original to " bname)
  154.     (OS-filter
  155.       (concat
  156.         RENAME-COMMAND " "
  157.     (external-file-name fname)
  158.     " "
  159.     (zap-path bname)
  160.       )
  161.     )
  162.   }                    ;; END   file exists
  163.   )
  164.   (save-buffer)
  165. }                    ;; END   save-buffer-with-backup
  166. )
  167.  
  168.             ;; Programs in this (defun) may be useful for
  169.             ;; debugging.
  170.  
  171. ;;  TEST  (defun
  172. ;;  TEST  test-backup-name
  173. ;;  TEST  {
  174. ;;  TEST    (string fn)                ;; BEGIN test-backup-name
  175. ;;  TEST    (ask-user)
  176. ;;  TEST    (fn (ask "File: "))
  177. ;;  TEST    (msg "File: " fn "  Backup: " (make-backup-name fn))
  178. ;;  TEST  }                    ;; END   test-backup-name
  179. ;;  TEST  ;;
  180. ;;  TEST  ;; ================================================================
  181. ;;  TEST  ;;
  182. ;;  TEST   test-external-file-name
  183. ;;  TEST  {
  184. ;;  TEST    (string fn)                ;; BEGIN test-external-file-name
  185. ;;  TEST    (ask-user)
  186. ;;  TEST    (fn (ask "File: "))
  187. ;;  TEST    (msg "File: " fn "  MS-DOS: " (external-file-name fn))
  188. ;;  TEST  }                    ;; END   test-external-file-name
  189. ;;  TEST  ;;
  190. ;;  TEST  ;; ================================================================
  191. ;;  TEST  ;;
  192. ;;  TEST    test-zap-path
  193. ;;  TEST  {
  194. ;;  TEST    (string fn)                ;; BEGIN test-zap-path
  195. ;;  TEST    (ask-user)
  196. ;;  TEST    (fn (ask "File: "))
  197. ;;  TEST    (msg "File: " fn "  Zapped file: " (zap-path fn))
  198. ;;  TEST  }                    ;; END   test-zap-path
  199. ;;  TEST  )
  200.